/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 沈明月
 * Date: 2022-11-01
 * Time: 23:26
 */
public class KnowledgeFour {
//关于Java的数据类型：
//整型int：
    public static void main1(String[] args) {

        System.out.println("hello world");//打印hello world

        //数据类型 变量  =   赋值   变量 （可以在运行过程中修改的量）
        int a=10;//a是整型变量，占4个字节（与操作系统无关），32位 ,范围：-2^31~2^31-1
        a=20;
        final int b=10;//这样定义（加了final）的变量不能修改

        //求出int类型的范围：
        System.out.println(Integer.MAX_VALUE);//2147483647
        //最大值（int）   Integer--->int的加强版（是一个包装类）
        System.out.println(Integer.MIN_VALUE);//-2147483648
        //最小值（int）

    }
//长整型long
    public static void main2(String[] args) {
        long a=10L;//8个字节--64bit   -2^63~2^63-1
        //长整型变量的初始值后加l或者L，推荐加L
        System.out.println(a);
        System.out.println(Long.MAX_VALUE);//9223372036854775807
        System.out.println(Long.MIN_VALUE);//-9223372036854775808
    }

//短整型short
    public static void main3(String[] args) {
        short sh=10;//2个字节---16bit  -2^15~2^15-1
        System.out.println(sh);
        System.out.println(Short.MAX_VALUE);//32767
        System.out.println(Short.MIN_VALUE);//-32768

    }

//字节类型byte
    public static void main4(String[] args) {
        byte a=10;//1个字节---8个bite   -2^7~2^7-1   -128~17
        System.out.println(a);
        System.out.println(Byte.MAX_VALUE);//127
        System.out.println(Byte.MIN_VALUE);//-128

    }

//双精度浮点型double
    public static void main5(String[] args) {
        double d=12.5;
        //8个字节---64bit

        System.out.println(d);
        System.out.printf("%.3f\n",d);//输出的值带三位小数,\n也是换行的意思

        System.out.println(Double.MAX_VALUE);
        System.out.println(Double.MIN_VALUE);

        int a=10;
        int b=2;
        System.out.println(a/b);//打印整型，若想打印结果带小数，只需要其中一个是小数即可
    }

//单精度浮点型float
    public static void main6(String[] args) {
        float f=12.5f;//不加f会报错
        System.out.println(f);
    }

//字符类型
    public static void main7(String[] args) {
        char ch='a';
        System.out.println(ch);
        char ch2='美';
        System.out.println(ch2);
        System.out.println(Character.MAX_VALUE);
        System.out.println(Character.MIN_VALUE);

    }

//布尔型变量boolean
    public static void main8(String[] args) {

        boolean flg=true;
        //C语言中0为真，非零即为真
        //在Java中，真就是true，假就是false
        //JVM并没有明确boolean的大小
    }

//类型转换---->只能大转小，不能小转大：
    public static void main9(String[] args) {
        int a=10;
        long b=20L;
        a=(int)b;//强制类型转换，不一定安全
        System.out.println(a);//20--->这里运行起来，a不一定是20（所以强制类型转换有风险）
        System.out.println(b);//20
    }
//int 转String：
    public static void main14(String[] args) {
        int a=12345;
        String ret=String.valueOf(a);
        System.out.println(ret);

        float f=12.5f;
        String ret2=String.valueOf(f);//12345
        System.out.println(ret2);//12.5
    }
//String转int，double转int：
    public static void main(String[] args) {
        String str="12345";
        int ret=Integer.valueOf(str);
        int num=Integer.parseInt(str);//等价于上面，valueOf引用了parseInt
        System.out.println(ret+1);

        String str2="a.25";
        double d=Double.valueOf(str2);
        System.out.println(d);
    }

//类型提升
    public static void main10(String[] args) {
        int a=10;
        long b=20L;
        int c=(int)(a+b);//a提升为8个字节然后和b参与运算--->8个字节
        long d=a+b;//直接用8个字节的long类型来存放
    }
    public static void main11(String[] args) {
        byte a=10;
        byte b=20;
        //error   byte c=a+b;
        //小于4个字节的在运算的时候会提升为4个字节
        byte c=(byte)(a+b);//修改
    }

//字符串类型String
    public static void main12(String[] args) {
        String str="hello";
        System.out.println(str);
        int a=10;
        System.out.println(a);
        //Java里面没有所谓的字符串以\0为截止
        //str和a都是局部变量
    }

//字符串相加就是将相加的字符串拼接起来:
    public static void main13(String[] args) {
        String str1="hello";
        String str2="world";
        System.out.println(str1+str2);//helloworld

        //字符串拼接任何数据类型都是字符串（如下）
        int a=10;
        int b=20;
        System.out.println("a = "+ a);//a = 10
        System.out.println("b = "+ b);//b = 20
        System.out.println("a+b =" +a+b);//a+b =1020
        //式子是从左向右计算的
        //所以先算+a,也就是“a+b"这个字符串先和a拼接，拼接以后就是"a+b =10"
        //拼接以后还是一个字符串
        //所以对待后面的+b,还是按照上面的字符串+b，依旧是拼接
        //所以后面还是将20拼接起来
        System.out.println("a+b =" +(a+b));//a+b =30
        //括号先计算出来”30“
        //再进行字符串拼接
        System.out.println(a+b+"是a+b的和");//30是a+b的和
        //因为式子是从左向右计算的，所以先计算出a+b的结果
        //再同上
    }
}
